package com.cy.store.service.impl;

import com.cy.store.entity.Cart;
import com.cy.store.entity.Product;
import com.cy.store.mapper.CartMapper;
import com.cy.store.mapper.ProductMapper;
import com.cy.store.service.ICartService;
import com.cy.store.service.ex.*;
import com.cy.store.vo.CartVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

@Service
public class CartServiceImpl implements ICartService {

    @Autowired
    CartMapper cartMapper;

    @Autowired
    ProductMapper productMapper;


    /**
     * 添加收藏商品
     */
    public void addToCart(Integer uid, Integer pid, Integer amount, String username) {



        // 先查是否存在
        Cart obj = cartMapper.findByUidAndPid(uid, pid);
        System.err.println("先查是否存在：" + obj);

        if (obj == null){       // 不存在

            // 获取商品价格
            Product product = productMapper.findById(pid);
            System.err.println("想要添加的商品信息：" + product);

            Cart cart = new Cart();

            cart.setUid(uid);
            cart.setPid(pid);
            cart.setNum(amount);

            cart.setPrice(product.getPrice());


            cart.setCreatedUser(username);
            cart.setModifiedUser(username);
            cart.setCreatedTime(new Date());
            cart.setModifiedTime(new Date());

            Integer rows = cartMapper.insert(cart);
            System.err.println("添加收藏的数据有几行：" + rows);
            if(rows != 1){
                throw new InsertException("添加收藏的数据出错");
            }
        }else {     // 已存在
            Integer num = obj.getNum() + amount;

            Integer rows2 = cartMapper.updateNumByCid(obj.getCid(), num, username, new Date());
            System.err.println("修改收藏的数据有几行：" + rows2);
            if(rows2 != 1){
                throw new UpdateException("修改收藏的数据出错");
            }
        }


    }

    /**
     * 展示某个用户 的收藏商品
     */
    public List<CartVO> getVOByUid(Integer uid) {

        List<CartVO> cartVOS = cartMapper.findVOByUid(uid);

        System.err.println("收藏的商品有：");
        for(CartVO c: cartVOS){
            System.err.println(c);
        }

        return cartVOS;
    }


    /**
     * 收藏数量+1
     */
    public Integer addNum(Integer cid, String username, Integer uid, Integer n){

        Cart cart = cartMapper.findByCid(cid);
        if(cart == null){
            throw new CartNotFoundException("没有发现这个收藏信息");
        }

        if(!uid.equals(cart.getUid())){
            throw new AccessDeniedException("非法访问的异常");
        }

        Integer num = cart.getNum() + n;

        Integer rows = cartMapper.updateNumByCid(cid, num, username, new Date());
        System.err.println("修改的行数：" + rows);
        if(rows != 1){
            throw new UpdateException("更新时出现未知异常");
        }

        return num;
    }


    /**
     * 结算
     */
    public List<CartVO> getVOByCid(Integer[] cids, Integer uid){

        if(cids == null){
            throw new nullException("无结算项目");
        }


        List<CartVO> list = cartMapper.findVOByCid(cids);
        System.err.println("想要结算的项目: ");
        for (CartVO c: list){
            System.err.println(c);
        }

        // 移除非本用户收藏的商品
//        Iterator<CartVO> it = list.iterator();
//        while (it.hasNext()){
//            CartVO cartVO = it.next();
//            if(!cartVO.getUid().equals(uid)){
//                list.remove(cartVO);
//            }
//        }

        // 移除非本用户收藏的商品
        for (CartVO c: list){
            if(!c.getUid().equals(uid)){
                list.remove(c);
            }
        }

        return list;
    }
}
